﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ComponentModel.DataAnnotations;
using System.Web.Mvc;
using System.ComponentModel;
using NLog;
using System.Web.Configuration;

namespace planerka.DataAccess.Models
{
    // служебный класс
    public class pageCategoryRoute
    {
        public int? id { get; set; }
        public string pageCategoryRouteValue { get; set; }
    }


    [MetadataType(typeof(pageCategoryMetaData))]
    public partial class pageCategory : IOrderable
    {
        private static Logger logger = LogManager.GetCurrentClassLogger();

        [Bind(Exclude = "ID")]
        public class pageCategoryMetaData
        {
            [ScaffoldColumn(false)]
            public object ID { get; set; }

            [Required(ErrorMessage = "Необходимо указать наименование")]
            [DisplayName("Наименование категории")]
            public object name { get; set; }

            [Required(ErrorMessage = "Необходимо указать URL")]
            [DisplayName("ЧПУ")]
            public object tag { get; set; }

        }

        //
        public bool move(int delta)
        {
            // возвращает false если ошибка сохранения
            // и если элемент находится в начале или конце списка
            var context = new linq2sqlDataContext(WebConfigurationManager.ConnectionStrings["ApplicationServices"].ToString());
            return sequenceProvider.Move(this.OrderBy, delta, context.pageCategories.Select(p => (IOrderable)p).ToList(), context);
        }

        //
        public int OrderBy
        {
            get { return order; }
            set { order = value; }
        }

        // Процедура возвращает список категорий для разделов:
        // - управление страницами сайта;
        // - управление категориями страниц сайта.
        public static List<pageCategoryRoute> retRoute(pageCategory catToExclude)
        {
            var db = new linq2sqlDataContext(WebConfigurationManager.ConnectionStrings["ApplicationServices"].ToString());
            List<pageCategory> pageCategories = db.pageCategories.OrderBy(p => p.name).ToList();
            List<pageCategoryRoute> pageCatRoutes = new List<pageCategoryRoute>();
            string route = "";
            pageCategory pc;
            foreach (var item in pageCategories)
            {
                if (item == catToExclude)
                    continue;

                pc = item;
                route = "";
                while (pc.parent_ID != null)
                {
                    route = " / " + pc.name + route;
                    pc = pc.pageCategory1;
                }
                //pc = pc.pageCategory1;
                route = pc.name + route;
                pageCatRoutes.Add(new pageCategoryRoute { id = item.ID, pageCategoryRouteValue = route });
            }

            return pageCatRoutes;
        }

    }
}
